package com.qq.open.qzone.photo;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;

import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.log4j.Logger;

import com.qq.open.common.OpenQqConstants;
import com.qq.open.common.OpenQqUtils;
import com.qq.open.common.json.JSONException;
import com.qq.open.common.json.JSONObject;
import com.qq.open.qzone.bean.param.QqAddAlbumParamBean;
import com.qq.open.qzone.bean.result.QqAddAlbumResultBean;

/**
 * 登录用户创建相册
 * 
 * @author HaoLiang
 *
 */
public class QqAddAlbum {
	
	/** QQ互联工具类 */
	private OpenQqUtils oqu = new OpenQqUtils();
	
	/** 日志 */
	private Logger log = Logger.getLogger(QqAddAlbum.class);

	
	/**
	 * 用户创建相册
	 * 
	 * @param qqAddAlbumBean 创建相册参数Bean 
	 * @return 
	 * @throws IOException 
	 * @throws UnsupportedEncodingException 
	 * @throws JSONException 
	 */
	public QqAddAlbumResultBean addAlbum(QqAddAlbumParamBean qqAddAlbumBean)
			throws IOException, JSONException {
		// 日志
		log.info("用户创建相册 开始...");

		// 获取接口返回的内容
		String jsonData = oqu.doPost(OpenQqConstants.QQ_ADD_ALBUM_URL, this
				.getAddAlbumParam(qqAddAlbumBean));
		
		// 接收json数据转换成bean
		QqAddAlbumResultBean resultBean = this.jsonToBean(jsonData);

		// 日志
		log.info("用户创建相册 结束...");
		
		return resultBean;
	}
	
	
	
	/**
	 * 
	 * 获取创建相册的参数和数据
	 * 
	 * @param qqu QQ互联工具类
	 * @param addAlbumBean 创建相册参数Bean
	 * @return 创建相册的参数和数据
	 * @throws UnsupportedEncodingException 
	 */
	private MultipartEntity getAddAlbumParam(QqAddAlbumParamBean addAlbumBean) throws UnsupportedEncodingException {
		MultipartEntity reqEntity = new MultipartEntity();
		
		// AccessToken
	    reqEntity.addPart("access_token", new StringBody(addAlbumBean.getAccessToken()));
	    
	    // AppId
	    reqEntity.addPart("oauth_consumer_key", new StringBody(oqu.getConfigValue("qq.appid")));
	    
	    // OpenId
	    reqEntity.addPart("openid", new StringBody(addAlbumBean.getOpenId()));
		
		// 相册名
	    reqEntity.addPart("albumname", new StringBody(addAlbumBean.getAlbumName(), Charset.forName("UTF-8")));
		
	    // 相册描述
		if (oqu.isNotNull(addAlbumBean.getAlbumDesc())) {
			reqEntity.addPart("albumdesc", new StringBody(addAlbumBean.getAlbumDesc(), Charset.forName("UTF-8")));
		}
		
		// 相册权限
		if (addAlbumBean.getAlbumPriv() > 0) {
			reqEntity.addPart("priv", new StringBody(String.valueOf(addAlbumBean.getAlbumPriv())));
		}
		
		// 定义API返回的数据格式
		reqEntity.addPart("format", new StringBody("json"));
		
		return reqEntity;
	}
	
	
	/**
	 * 把接口返回的json数据转换成JavaBean
	 * 
	 * @param jsonData 接口返回的数据
	 * @return JavaBean数据
	 * @throws JSONException 
	 */
	private QqAddAlbumResultBean jsonToBean(String jsonData) throws JSONException {
		QqAddAlbumResultBean resultBean = new QqAddAlbumResultBean();
		
		// 接口返回的数据Josn
		JSONObject jsonObjRoot;
		try {
			jsonObjRoot = new JSONObject(jsonData);
		
			// 接口返回错误的场合
			if (jsonObjRoot.getInt("ret") != 0) {
				// 设置错误标识为真
				resultBean.setErrorFlg(true);
				
				// 设置错误编号
				resultBean.setErrorCode(jsonObjRoot.get("ret").toString());
				
				// 设置错误信息
				resultBean.setErrorMes(jsonObjRoot.getString("msg"));
			} else {
				// 相册ID
				resultBean.setAlbumId(jsonObjRoot.getString("albumid"));
				
				// 相册创建时间
				resultBean.setCreateTime(oqu.timeStampToDate(jsonObjRoot.get("createtime").toString()));
				
				// 相册描述
				resultBean.setDesc(jsonObjRoot.getString("desc"));
				
				// 相册名称
				resultBean.setName(jsonObjRoot.getString("name"));
				
				// 相册权限
				resultBean.setPriv(jsonObjRoot.get("priv").toString());
			}
		} catch (JSONException e) {
			e.printStackTrace();
			// 日志
			log.error("addAlbum 异常，json数据是：" + jsonData);
			
			throw e;
		}
		return resultBean;
	}
}
